package com.it.lambda;

public class Lambda1 {
    public static void main(String[] args) {
        // 目标：认识Lambda

        // 匿名内部类
//        Animal a = new Animal() {
//            // 重写run() 方法
//            @Override
//            public void run() {
//                System.out.println("狗");
//            }
//        };
//        a.run();

        // 注意: Lambda 表达式并不是说能简化全部匿名内部类的写法，只能简化函数式接口的匿名内部类
        /**
         * 函数式接口：
         *  1.首先得是接口
         *  2.接口里只能有一个抽象方法
         */

//        错误代码
//        Animal a = ()-> {
//            System.out.println("狗");
//        };
//        a.run();


        //匿名内部类对象
//        Swimming s = new Swimming() {
//            // 重写swim()方法
//            @Override
//            public void swim() {
//                System.out.println("游泳");
//            }
//        };
//        s.swim();

        Swimming s = () -> {
            System.out.println("游泳");
        };
        s.swim();
    }
}

//注意：将来我们见到的大部分函数式接口，上面都可能会有一个@FunctionallInterface的注解，有该注解的接口就必定是函数式接口

// 接口
interface Swimming {
    void swim();
}

// abstract抽象的
abstract class Animal { // abstract抽象的类
    public abstract void run(); // abstract抽象的方法
}